package com.xkcyy.one.controller;

import com.xkcyy.one.common.Result;
import com.xkcyy.one.entity.Agent;
import com.xkcyy.one.entity.Tool;
import com.xkcyy.one.service.AgentToolService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 智能体工具关联控制器
 * 
 * @author yuand
 */
@RestController
@RequestMapping("/api/agent-tools")
public class AgentToolController {

    private final AgentToolService agentToolService;

    @Autowired
    public AgentToolController(AgentToolService agentToolService) {
        this.agentToolService = agentToolService;
    }

    /**
     * 获取智能体关联的工具列表
     *
     * @param agentId 智能体ID
     * @return 工具列表
     */
    @GetMapping("/agent/{agentId}")
    public Result<List<Tool>> getToolsByAgentId(@PathVariable Long agentId) {
        return Result.success(agentToolService.getToolsByAgentId(agentId));
    }

    /**
     * 获取使用工具的智能体列表
     *
     * @param toolId 工具ID
     * @return 智能体列表
     */
    @GetMapping("/tool/{toolId}")
    public Result<List<Agent>> getAgentsByToolId(@PathVariable Long toolId) {
        return Result.success(agentToolService.getAgentsByToolId(toolId));
    }

    /**
     * 为智能体添加工具
     *
     * @param agentId 智能体ID
     * @param toolId  工具ID
     * @return 操作结果
     */
    @PostMapping("/add")
    public Result<Void> addToolToAgent(@RequestParam Long agentId, @RequestParam Long toolId) {
        agentToolService.addToolToAgent(agentId, toolId);
        return Result.success();
    }

    /**
     * 批量添加工具到智能体
     *
     * @param agentId 智能体ID
     * @param toolIds 工具ID列表
     * @return 添加的工具ID列表
     */
    @PostMapping("/add-batch")
    public Result<List<Long>> addToolsToAgent(@RequestParam Long agentId, @RequestBody List<Long> toolIds) {
        return Result.success(agentToolService.addToolsToAgent(agentId, toolIds));
    }

    /**
     * 从智能体移除工具
     *
     * @param agentId 智能体ID
     * @param toolId  工具ID
     * @return 操作结果
     */
    @DeleteMapping("/remove")
    public Result<Void> removeToolFromAgent(@RequestParam Long agentId, @RequestParam Long toolId) {
        agentToolService.removeToolFromAgent(agentId, toolId);
        return Result.success();
    }

    /**
     * 批量移除工具从智能体
     *
     * @param agentId 智能体ID
     * @param toolIds 工具ID列表
     * @return 移除的工具ID列表
     */
    @DeleteMapping("/remove-batch")
    public Result<List<Long>> removeToolsFromAgent(@RequestParam Long agentId, @RequestBody List<Long> toolIds) {
        return Result.success(agentToolService.removeToolsFromAgent(agentId, toolIds));
    }

    /**
     * 清空智能体的所有工具
     *
     * @param agentId 智能体ID
     * @return 操作结果
     */
    @DeleteMapping("/clear/{agentId}")
    public Result<Void> clearAgentTools(@PathVariable Long agentId) {
        agentToolService.clearAgentTools(agentId);
        return Result.success();
    }
}